/**
 * 总结这一章的继承方式
 */
// 1、类式继承：子类prototype是父类的实例
// 2、构造函数继承：子类构造函数中利用call继承父类的对象公有属性、对象公有方法，而父类prototype上的属性方法无法继承
// 3、组合继承：类式继承 + 构造函数继承，即在子类构造函数中利用call继承父类的公有方法、公有属性，子类prototype是父类的实例，这样可以避免对父类引用类型值改造的影响
// 4、原型式继承：对类式继承的封装，在构造函数中，接收父类参数，首先声明一个子类，然后子类的prototype继承父类，最终返回新的子类
// 5、寄生式继承：对原型封装的二次封装。在子类构造函数中，先用原型继承方式获得子类，再在子类上添加自己的属性、方法，最终返回子类
// 6、寄生组合式继承：寄生式继承 + 构造函数继承。核心代码如下

        var p = inheritObject(superClass.prototype);
        // 修正因为重写子类导致子类的constructor属性被修改
        p.constructor = subClass;
        // 设置子类的原型
        subClass.prototype = p;
        
/**
 * 如何实现深拷贝
 */